package main

import "fmt"

/*
1、基本介绍
类型断言，由于接口是一般类型，不知道具体类型，如果要转成具体类型，就需要使用类型断言
*/
type Point struct {
	x int
	y int
}

func main() {
	var a interface{}
	var point Point = Point{1, 2}
	a = point
	//如何将a赋给一个Point变量
	var b Point
	//b=a 不可以
	//b=a.(Point) 可以
	b = a.(Point)
	fmt.Println(b)

	//类型断言的其它案例
	var x interface{}
	var b2 float32 = 1.1
	x = b2 //空接口，可以接收任意类型
	y := x.(float32)
	fmt.Printf("y的类型%T y=%v\n", y, y)
	//说明：
	//在进行类型断言时，如果类型不匹配，就会报panic，因此进行类型断言时，要确保原来的空接口指向的就是断言的类型

	//如何在进行断言时，带上检测机制，如果成功就ok，否则也不要报panic
	//带检测
	var x2 interface{}
	var b3 float32 = 1.1
	x2 = b3 //空接口，可以接收任意类型
	if y2, ok := x2.(float64); ok {
		fmt.Println("convert success")
		fmt.Printf("y2的类型%T y2=%v\n", y2, y2)
	} else {
		fmt.Println("convert fail")
	}
	fmt.Println("继续执行")

}
